package com.pkk.cloud.support.admin.dto.req.client;

import java.io.Serializable;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @description: 客户端添加请求类
 * @author: peikunkun
 * @create: 2020-03-30 10:56
 **/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OauthClientAddReqDto implements Serializable {

  private static final long serialVersionUID = -5242057700639999896L;

  /**
   * 客户端id[客户端的信息,可理解为后台服务端）]
   */
  @NotBlank(message = "客户端ID不能为空")
  private String clientId;

  /**
   * 客户端名称
   */
  @NotBlank(message = "客户端名称不能为空")
  private String clientName;

  /**
   * 客户端密钥【第三方应用和授权服务器之间的安全凭证(可理解为密码)】
   */
  @NotBlank(message = "客户端密钥不能为空")
  private String clientOriginalSecret;


  /**
   * 授权类型此客户端可以使用的授权类型，默认为空。
   * <p>
   * 可选值包括authorization_code,password,refresh_token,implicit,client_credentials 最常用的grant_type组合有:
   * "authorization_code,refresh_token"(针对通过浏览器访问的客户端); "password,refresh_token"(针对移动设备的客户端)
   * <p>
   * ------------
   * <p>
   * 授权码模式（authorization code）,简化模式（implicit）,密码模式（resource owner password credentials）,客户端模式（client credentials）
   * <p>
   * 这其中密码模式需要将用户地帐密提供给客户端，但客户端不能存储密码，这种模式好像和我们之前说的不一样啊？其实，这种模式一般用在高度信任地情况下，比如合作厂商，自己系统地各服务之间地通信等。
   * <p>
   * 客户端模式更加地简单了，直接由客户端像认证服务器请求令牌，没有用户什么事。
   * <p>
   * 最接近我们之前描述地其实是授权码模式，但是这种模式又非常地复杂，涉及到回调地址，而且用户没有向客户端提供帐密，最后客户端是通过授权服务器发放地token（也就是授权码）来拿资源地
   */
  @NotNull(message = "客户端密钥不能为空")
  private String[] grantTypeArr;

  /**
   * token的有效期access_token 的有效时长 (秒), 默认 12 小时
   */
  private Integer accessTokenValiditySeconds;

  /**
   * 刷新token的有效期refresh_token 的有效时长 (秒), 默认 30 天
   */
  private Integer refreshTokenValiditySeconds;

  /**
   * 是否启用
   */
  @NotNull(message = "请选择是否启用")
  private Boolean enable;

  /**
   * 类型，1：页面，2：服务
   */
  @NotNull(message = "请选择客户端类型")
  private Integer clientType;

  /**
   * 客户端所属服务端id(一个服务端可以有多个客户端)
   */
  private Long ownServerId;

  /**
   * 跳转URL客户端的重定向URI
   */
  private String redirectUri;

}
